package orcamento;

import java.io.Serializable;
import java.sql.Time;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.faces.model.SelectItem;
import javax.naming.NamingException;

import ordemServico.EntidadeOrdem;
import ordemServico.Item_ord_mat;
import ordemServico.Item_ord_serv;
import ordemServico.Ordem;

import servico.EntidadeServico;
import usuario.Usuario;
import util.ServiceLocator;
import material.EntidadeMaterial;

public class OrcamentoGers implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@PostConstruct
	public void iniciar() {
		System.out.println("O Bean Cadastro Funcionario Foi Iniciado");
	}

	@PreDestroy
	public void encerrar() {
		System.out.println("O Bean Cadastro Funcionario foi Encerrado");
	}
	
	private Date data_exec;
	private Time hora_exec;
	private String statu;
	private String aprov;
	private List<String> status = new ArrayList<String>();
	private List<String> aprovs = new ArrayList<String>();
	private String orcamento_ = new String();
	private List<EntidadeOrcamento> orcamentos = new ArrayList<EntidadeOrcamento>();
	private EntidadeOrcamento orcamento = new EntidadeOrcamento();
	private List<Item_orc_mat> item_mat = new ArrayList<Item_orc_mat>();
	private List<Item_orc_serv> item_serv = new ArrayList<Item_orc_serv>();
	private List<EntidadeMaterial> materiais = new ArrayList<EntidadeMaterial>();
	private List<EntidadeServico> servicos = new ArrayList<EntidadeServico>();
	
	private EntidadeOrdem ordemServico = new EntidadeOrdem();
	private Item_ord_mat ordemMat = new Item_ord_mat();
	private Item_ord_serv ordemServ = new Item_ord_serv();
	
	public String seleciona() throws NamingException
	{
		Orcamento orca = (Orcamento) ServiceLocator
		.getService("orcamentoBean/remote");
		
		setOrcamento(orca.getOrca(Integer.parseInt(getOrcamento_())));
		setItem_mat(orca.busca_item_mat(orcamento.getNum_orc()));
		setItem_serv(orca.busca_item_serv(orcamento.getNum_orc()));
		
		Ordem ordem = (Ordem) ServiceLocator
		.getService("ordemBean/remote");
		
		for(int i = 0; item_mat.size() > i; i++)
		{
			ordemMat.setId_mat(item_mat.get(i).getCod_item());
			ordemMat.setDesc_mat(item_mat.get(i).getDesc_item());
			ordemMat.setVlr_mat(item_mat.get(i).getVlr_item());
			ordem.setMat(ordemMat);
		}
		for(int i = 0; item_serv.size() > i; i++)
		{
			ordemServ.setId_serv(item_serv.get(i).getCod_item());
			ordemServ.setDesc_serv(item_serv.get(i).getDesc_item());
			ordemServ.setVlr_serv(item_serv.get(i).getVlr_item());
			ordem.setServ(ordemServ);
		}
		return null;
	}
	
	
	public Time getHora_exec() {
		return hora_exec;
	}

	public void setHora_exec(Time hora_exec) {
		this.hora_exec = hora_exec;
	}

	public List<Item_orc_mat> getItem_mat() {
		return item_mat;
	}

	public void setItem_mat(List<Item_orc_mat> item_mat) {
		this.item_mat = item_mat;
	}

	public List<Item_orc_serv> getItem_serv() {
		return item_serv;
	}

	public void setItem_serv(List<Item_orc_serv> item_serv) {
		this.item_serv = item_serv;
	}

	public Date getData_exec() {
		return data_exec;
	}

	public void setData_exec(Date data_exec) {
		this.data_exec = data_exec;
	}

	public String getStatu() {
		return statu;
	}

	public void setStatu(String statu) {
		this.statu = statu;
	}

	public String getAprov() {
		return aprov;
	}

	public void setAprov(String aprov) {
		this.aprov = aprov;
	}

	public List<SelectItem> getStatus() {
		List<SelectItem> lista = new ArrayList<SelectItem>();
		SelectItem item = new SelectItem("Aprovado", "Aprovados");
		lista.add(item);
		item = new SelectItem("Rejeitado", "Rejeitados");
		lista.add(item);
		return lista;
	}

	public void setStatus(List<String> status) {
		this.status = status;
	}

	public List<SelectItem> getAprovs() {
		List<SelectItem> lista = new ArrayList<SelectItem>();
		SelectItem item = new SelectItem("Aprovado", "Aprovado");
		lista.add(item);
		item = new SelectItem("Rejeitado", "Rejeitado");
		lista.add(item);
		return lista;
	}

	public void setAprovs(List<String> aprovs) {
		this.aprovs = aprovs;
	}

	public String getOrcamento_() {
		return orcamento_;
	}

	public void setOrcamento_(String orcamento_) {
		this.orcamento_ = orcamento_;
	}

	public List<SelectItem> getOrcamentos() throws NamingException {
		List<SelectItem> lista = new ArrayList<SelectItem>();
		
		Orcamento orca = (Orcamento) ServiceLocator
		.getService("orcamentoBean/remote");
		
		setOrcamentos(orca.orcamentos("Aprovado"));
		for(int i = 0; orcamentos.size() > i; i++)
		{
			SelectItem item = new SelectItem(orcamentos.get(i).getNum_orc(), orcamentos.get(i).getNome() + orcamentos.get(i).getData_criacao());
			lista.add(item);
		}
		return lista;
	}

	public void setOrcamentos(List<EntidadeOrcamento> orcamentos) {
		this.orcamentos = orcamentos;
	}

	public EntidadeOrcamento getOrcamento() {
		return orcamento;
	}

	public void setOrcamento(EntidadeOrcamento orcamento) {
		this.orcamento = orcamento;
	}

	public List<EntidadeMaterial> getMateriais() {
		return materiais;
	}

	public void setMateriais(List<EntidadeMaterial> materiais) {
		this.materiais = materiais;
	}

	public List<EntidadeServico> getServicos() {
		return servicos;
	}

	public void setServicos(List<EntidadeServico> servicos) {
		this.servicos = servicos;
	}
	
	public String busca_status() throws NamingException
	{
		Orcamento orca = (Orcamento) ServiceLocator
		.getService("orcamentoBean/remote");
		
		setOrcamentos(orca.orcamentos(getStatu()));
		return null;
	}
	public String alterar_orc() throws NamingException
	{
		Orcamento orca = (Orcamento) ServiceLocator
		.getService("orcamentoBean/remote");
		
		Usuario cli = (Usuario) ServiceLocator
		.getService("usuarioBean/remote");
		
		orcamento = orca.getOrcamento_();
		orcamento.setStatus(getStatu());
		
		String status = "Aprovado";
		
		if(statu.equals(status))
		{
			Ordem ordem = (Ordem) ServiceLocator
			.getService("ordemBean/remote");
			
			ordemServico.setData(data_exec);
			ordemServico.setHorario(hora_exec);
			ordemServico.setCliord(cli.busca_cliente(orcamento.getCliente().getCodigo()));
			ordem.CadastraOrdem(ordemServico);
		}
		orca.AtualizaOrcamento(getOrcamento());
		return null;
	}
}
